import cv2 as cv

def play_video_or_stream(source, window_name='video', window_size=(480, 780), wait_key=40):
    """
    播放视频或视频流的函数。

    参数:
        source (str or int): 视频或视频流的来源。
                             - 如果是字符串，表示本地视频文件路径或网络视频流的URL。
                             - 如果是整数，表示摄像头的索引（例如0表示默认摄像头）。
        window_name (str): 创建的窗口名称，默认为'video'。
        window_size (tuple): 窗口大小，格式为(width, height)，默认为(480, 780)。
        wait_key (int): 每帧等待的时间（毫秒），默认为40。
    """
    # 打开视频或视频流
    cap = cv.VideoCapture(source)
    if not cap.isOpened():
        print(f"无法打开视频/视频流：{source}")
        return

    # 设置窗口大小
    cv.namedWindow(window_name, cv.WINDOW_NORMAL)
    cv.resizeWindow(window_name, *window_size)

    while True:
        ret, frame = cap.read()
        if not ret:
            print("视频播放结束或无法读取帧")
            break

        cv.imshow(window_name, frame)

        # 按下'q'键退出
        if cv.waitKey(wait_key) & 0xFF == ord('q'):
            break

    # 释放资源并关闭窗口
    cap.release()
    cv.destroyAllWindows()

# 示例调用
# 播放本地视频文件
if __name__ == '__main__':
    play_video_or_stream('mp4文件')

    # 播放摄像头视频流（假设默认摄像头索引为0）
    play_video_or_stream(0)

    # 播放网络视频流（需要一个有效的URL）
    play_video_or_stream('http://example.com/streaming/channels/1')